package com.changgou.goods.service.impl;

import com.changgou.goods.dao.CategoryMapper;
import com.changgou.goods.dao.TemplateMapper;
import com.changgou.goods.pojo.Category;
import com.changgou.goods.pojo.Template;
import com.changgou.goods.service.TemplateService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @Author seafwg
 * @Date 2021/11/28 3:58 下午
 * @Version 1.0
 * @description 模板管理：
 */
@Service
public class TemplateServiceImpl implements TemplateService {
    @Autowired
    private TemplateMapper templateMapper;

    @Autowired
    private CategoryMapper categoryMapper;
    /**
     * 根据分类ID查询模板信息
     * @param cId
     * @return
     */
    @Override
    public Template findByCategoryId(Integer cId) {
        // 分类Mapper先根据分类ID查询出分类信息，根据分类信息获取模板ID，模板Mapper根据模板ID查询模板信息
        // according to cId query category info
        Category category = categoryMapper.selectByPrimaryKey(cId);
        // according to category info get Template id
        Integer templateId = category.getTemplateId();
        // according to template id query template info
        Template template = templateMapper.selectByPrimaryKey(templateId);
        return template;
    }

    /**
     * 增加模板数据：
     * @param template
     * @return
     */
    @Override
    public int add(Template template) {
        return templateMapper.insert(template);
    }

    /**
     * 根据模板id删除数据：
     * @param id
     * @return
     */
    @Override
    public int delete(Integer id) {
        return templateMapper.deleteByPrimaryKey(id);
    }

    /**
     * 根据ID更新模板数据：
     * @param template
     * @param id
     * @return
     */
    @Override
    public int update(Template template, Integer id) {
        template.setId(id);
        return templateMapper.updateByPrimaryKeySelective(template);
    }

    /**
     * 查询所有模版管理数据
     * @return
     */
    @Override
    public List<Template> fincAll() {
        return templateMapper.selectAll();
    }

    /**
     * 根据模板ID查询模板信息
     * @param id
     * @return
     */
    @Override
    public Template findById(Integer id) {
        return templateMapper.selectByPrimaryKey(id);
    }

    /**
     * 多条件查询：
     * @param template
     * @return
     */
    @Override
    public List<Template> findList(Template template) {
        // 调用createExample构造查询条件
        Example example = createExample(template);
        // 查询
        List<Template> list = templateMapper.selectByExample(example);
        return list;
    }

    /**
     * 分页查询：
     * @param page
     * @param size
     * @return
     */
    @Override
    public PageInfo<Template> findPage(Integer page, Integer size) {
        PageHelper.startPage(page, size);
        List<Template> list = templateMapper.selectAll();
        return new PageInfo<Template>(list);
    }

    /**
     * 多条件分页查询 + 分页：
     * @param template
     * @return
     */
    @Override
    public PageInfo<Template> findPage(Template template, Integer page, Integer size) {
        // 分页
        PageHelper.startPage(page, size);
        // 使用createExample构建查询对象
        Example example = createExample(template);
        // 调用查询对象查询
        List<Template> list = templateMapper.selectByExample(example);
        // 构建分页信息
        PageInfo<Template> pageInfoList = new PageInfo<>(list);
        return pageInfoList;
    }

    /**
     * 创建Example
     * @param template
     * @return
     */
    public Example createExample(Template template) {
        // 1.生成条件对象
        Example example = new Example(Template.class);
        // 2.创建一个条件构造器
        Example.Criteria criteria = example.createCriteria();
        // 3.构造条件
        if (template != null) {
            // id
            if(!StringUtils.isEmpty(template.getId())) {
                criteria.andEqualTo("id", template.getId());
            }
            // name
            if(!StringUtils.isEmpty(template.getName())) {
                criteria.andLike("name", "%"+template.getName()+"%");
            }
            // specNum
            if(!StringUtils.isEmpty(template.getSpecNum())) {
                criteria.andEqualTo("name", template.getSpecNum());
            }
            // paraNum
            if (!StringUtils.isEmpty(template.getParaNum())) {
                criteria.andEqualTo("paraNum", template.getParaNum());
            }
        }
        // 4.返回构造的条件
        return example;
    }
}
